package me.aartikov.alligator.navigators;


import me.aartikov.alligator.animations.AnimationData;
import me.aartikov.alligator.exceptions.NavigationException;
import me.aartikov.alligator.Screen;
import me.aartikov.alligator.ScreenResult;
import me.aartikov.alligator.destinations.FragmentDestination;

public interface FragmentNavigator {

    boolean goForward(Screen screen,
                      FragmentDestination destination,
                      AnimationData animationData) throws NavigationException;

    boolean replace(Screen screen,
                    FragmentDestination destination,
                    AnimationData animationData) throws NavigationException;

    boolean reset(Screen screen,
                  FragmentDestination destination,
                  AnimationData animationData) throws NavigationException;

    boolean canGoBack();

    boolean goBack(Screen screen,ScreenResult screenResult,
                   AnimationData animationData) throws NavigationException;

    boolean goBackTo(Class<? extends Screen> screenClass,
                     FragmentDestination destination,
                     ScreenResult screenResult,
                     AnimationData animationData) throws NavigationException;

}
